import 'package:json_annotation/json_annotation.dart';

@JsonSerializable()
class CustomJsonConverterBean {
  @SmartBool()
  bool? b;

  @SmartBoolList()
  List<bool>? b2;
}

class SmartBool extends JsonConverter<bool?, dynamic> {
  const SmartBool();

  @override
  bool? fromJson(dynamic json) {
    if (json == null) return null;
    final v = json.toString().toLowerCase();
    if (v == '1') return true; // 0/1
    if (v == 'y') return true; // Y/N
    return v == 'true';
  }

  @override
  dynamic toJson(bool? v) {
    if (v == null) return null;
    return v ? 'Y' : 'N';
  }
}

class SmartBoolList extends JsonConverter<List<bool>?, dynamic> {
  const SmartBoolList();

  @override
  List<bool>? fromJson(dynamic json) {
    final v = json as String?;
    return v?.split(',').map((e) => SmartBool().fromJson(e)!).toList();
  }

  @override
  dynamic toJson(List<bool>? v) {
    if (v == null) return null;
    return v.map((e) => SmartBool().toJson(e)).join(',');
  }
}
